package data;

import java.util.Iterator;
import java.util.List;

import org.hibernate.Hibernate;
import org.hibernate.Session;

import englishChicken.Usuario;

public class JDBCUsuarioDAO implements IUsuarioDAO{
	
	public void delete(String uid){
		System.out.println("JDBCUsuarioDAO: metodo delete");
		Session session=HibernateUtil.getSessionFactory().getCurrentSession();
    	session.beginTransaction();
    	session.delete("uid",uid);
    	session.getTransaction().commit();
	}
	
	public void insert(String uid,Usuario u){
		System.out.println("JDBCUsuarioDAO: metodo insert");
    	Usuario s=this.selectByUID(uid);
    	if(s==null){
    		Session session=HibernateUtil.getSessionFactory().getCurrentSession();
        	session.beginTransaction();
    		u.setId(uid);
    		session.save(u);
        	session.flush();
        	session.getTransaction().commit();
    	}
	}

	public void update(Usuario u){
		System.out.println("JDBCUsuarioDAO: metodo update");
    	Usuario s=this.selectByUID(u.getUid());
    	if(s!=null){
    		Session session=HibernateUtil.getSessionFactory().getCurrentSession();
        	session.beginTransaction();
    		session.update(u);
        	session.flush();
        	session.getTransaction().commit();
    	}
	}
	
    public Usuario selectByName(String apodo){
    	System.out.println("JDBCUsuarioDAO: metodo selectByName");
    	return select("apodo",apodo);
    }
    
    public Usuario selectByUID(String uid){
    	System.out.println("JDBCUsuarioDAO: metodo selectByUID");
    	return select("uid",uid);
    }
    
    public Usuario select(String sBy,String by){
    	System.out.println("JDBCUsuarioDAO: metodo select");
    	Session session=HibernateUtil.getSessionFactory().getCurrentSession();
    	session.beginTransaction();
    	Usuario peticion=(Usuario)session.createQuery("from Usuario as u where u."+sBy+" = ?")
    	.setString(0,by)
    	.uniqueResult();
    	if(peticion!=null){
    		Hibernate.initialize(peticion);
    		Hibernate.initialize(peticion.getJuegosJugadosJ());
    		Hibernate.initialize(peticion.getJuegosApadrinadosJ());
    		Hibernate.initialize(peticion.getAsistenciaEventosE());
    		Hibernate.initialize(peticion.getSolicitudPadrinoJ());
    	}
    	session.getTransaction().commit();
    	return peticion;
    }
    
    public List<Usuario> selectAll(){
    	System.out.println("JDBCUsuarioDAO: metodo selectAll");
    	Session session=HibernateUtil.getSessionFactory().getCurrentSession();
    	session.beginTransaction();
    	List<Usuario> resultado=session.createQuery("from Usuario").list();
    	session.getTransaction().commit();
    	Iterator<Usuario> resIT=resultado.iterator();
    	while(resIT.hasNext()){
    		Usuario resAct=resIT.next();
    		Hibernate.initialize(resAct);
        	Hibernate.initialize(resAct.getJuegosJugadosJ());
        	Hibernate.initialize(resAct.getJuegosApadrinadosJ());
        	Hibernate.initialize(resAct.getAsistenciaEventosE());
        	Hibernate.initialize(resAct.getSolicitudPadrinoJ());
    	}
    	return resultado;
    }
}
